#pragma once
#include <windows.h>
#include <ddk/NtddVol.h>	// replacement for <WinIoCtl.h> (for drive listing)
//#include <winuser.h>	- I'm not sure why I had this in here...

#include <string>
#include <cstdio>
#include <iostream>
#include <sstream>	// Used in BKConvert for converting stuff (e.g. long) to strings
#include <fstream>

namespace BKAPI
{
	class BKMouse
	{
	public:
		void Click();
		void ClickAtPoint(int xPos, int yPos);
		void ClickAtPoint(int xPos, int yPos, bool isRelative);
		void GetMouseXY(int &xPos, int &yPos);
		void SetMouseXY(int xPos, int yPos);
	};
	
	class BKWindow
	{
	public:
		HWND GetWindow(std::string windowTitle);
		HWND GetWindow(std::string windowTitle, bool shouldThrowError);
		bool GetWindowRectangle(HWND handleOfWindow, LPRECT rectangleToStoreIn);
		bool GetWindowRectangle(std::string windowTitle, LPRECT rectangleToStoreIn);
		void MakeSimpleWindow(WNDPROC WindowProcedure, LPCTSTR WindowTitle);
		void MakeWindow(UINT WindowStyle, WNDPROC WindowProcedure, HINSTANCE hInstance, HBRUSH BackgroundColor, LPCTSTR ClassName, DWORD WindowType, LPCTSTR TitleText);
	};
	
	class BKNotification
	{
	public:
		int MsgBox(std::string message, std::string caption);
		int MsgBox(std::string message, std::string caption, unsigned msgStyle);
	};
	
	class BKFileSystem
	{
	public:
		std::string CurrentDirectory();
		bool FileExists(const char *filePath);
		std::string GetAvailableDriveStrings(bool shouldIncludeType);
		void PrintAvailableDrives(bool shouldIncludeType);
	};
	
	class BKSystem
	{
	public:
		void Pause();
	};
	
	class BKConvert
	{
	public:
		std::string LongToString(long value);
	};
	
	class BKError
	{
	public:
		void ShowDefaultErrorMessage(LPTSTR lpszFunction);
	};
};


//	Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
//	Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Integer) As Long
//	Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
